import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import envConfig from '../config/env';
import { ModuleIndex } from './modules/module.index'; //集中导入模块
import { EntityIndex } from './modules/entites.index';//集中导入数据表实体

import { AuthModule } from './modules/auth/auth.module'; //集中导入模块
import { AuthEntity } from './modules/auth/entities/auth.entity';//集中导入数据表实体

const moduleMain = [...ModuleIndex, AuthModule]
const entityMain = [...EntityIndex, AuthEntity]

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // 设置为全局
      envFilePath: [envConfig.path],
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: async (configService: ConfigService) => (
        {
          type: 'mysql', // 数据库类型
          entities: entityMain, // 数据表实体，synchronize为true时，自动创建表，生产环境建议关闭
          host: configService.get('DB_HOST'), // 主机，默认为localhost
          port: configService.get<number>('DB_PORT'), // 端口号
          username: configService.get('DB_USER'), // 用户名
          password: configService.get('DB_PASSWD'), // 密码
          database: configService.get('DB_DATABASE'), //数据库名
          timezone: '+08:00', //服务器上配置的时区
          synchronize: true, //根据实体自动创建数据库表， 生产环境建议关闭
        }
      ),
    }),
    ...moduleMain,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule { }
